package com.huiztech.kaoqinji.mvc;

import java.io.File;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

import com.huiztech.common.http.HuizBaseJsonResponseHandler.Callback;
import com.huiztech.common.mvc.HuizController;
import com.huiztech.kaoqinji.AppConst;
import com.huiztech.kaoqinji.model.ClientData;
import com.huiztech.kaoqinji.model.ClientDetail;
import com.huiztech.kaoqinji.model.SignOn;
import com.huiztech.kaoqinji.model.UserInfoDetail;
import com.lidroid.xutils.DbUtils;

public abstract class AbstractKaoqinController extends HuizController<KaoqinView> {

    public SharedPreferences sp;// 手机本地存储空间
    public Editor editor;
    public DbUtils db;

    //定义抽象方法

    /**
     * 登录
     * 
     * @param username
     *            用户名
     * @param password
     *            密码
     */
    public abstract void doLogin(final String username, final String password);

    /**
     * 签到
     * 
     * @param lat
     *            纬度
     * @param lng
     *            经度
     */
    public abstract void doSignOn(double lat, double lng, Callback<SignOn> callback);

    /**
     * 签退
     * 
     * @param lat
     *            纬度
     * @param lng
     *            经度
     */
    public abstract void doSignOut(double lat, double lng, Callback<SignOn> callback);

    /**
     * 拜访服务
     * 
     * @param lat
     *            纬度
     * @param lng
     *            经度
     */
    public abstract void doVisitServer(final double lat, final double lng);

    /**
     * 得到客户列表信息
     */
    public abstract void getCustomerData(Callback<ClientData> callback);

    /**
     * 添加客户信息
     * 
     * @param companyName
     *            公司名
     * @param companyAddress
     *            公司地址
     * @param name
     *            客户名
     * @param file
     *            客户头像
     * @param position
     *            客户职务
     * @param phone
     *            客户手机号
     * @param email
     *            客户邮箱
     * @param qq
     *            客户QQ
     */
    public abstract void addCustomer(String companyName, String companyAddress, String name, File file,
            String position, String phone, String email, String qq);

    /**
     * 开始拜访
     * 
     * @param lat
     *            纬度
     * @param lng
     *            经度
     * @param customerId
     *            客户ID
     */
    public abstract void startVisit(double lat, double lng, int customerId);

    /**
     * 结束拜访
     * 
     * @param lat
     *            纬度
     * @param lng
     *            经度
     * @param customerId
     *            客户ID
     */
    public abstract void stopVisit(double lat, double lng, int customerId);

    /**
     * 得到考勤间隔
     */
    public abstract void getInterval();

    /**
     * 从本地获得User数据
     * 
     * @return
     */
    public UserInfoDetail getUserFromLocal() {
        UserInfoDetail userInfoDetail = new UserInfoDetail();
        userInfoDetail.setUserId(sp.getString("userId", null));
        userInfoDetail.setName(sp.getString("name", null));
        userInfoDetail.setImage(sp.getString("image", null));
        userInfoDetail.setEmail(sp.getString("email", null));
        userInfoDetail.setPhone(sp.getString("phone", null));
        userInfoDetail.setPosition(sp.getString("position", null));
        userInfoDetail.setQq(sp.getString("qq", null));
        userInfoDetail.setPassword(sp.getString("password", null));
        userInfoDetail.setUsername(sp.getString("username", null));
        this.huizModel.put(AppConst.SP_USER_KEY, userInfoDetail);
        return userInfoDetail;
    };

    /**
     * 存储用户数据到本地SharedPreferences并把用户数据赋值到model
     * 
     * @param userInfoDetail
     *            用户数据详细信息对象
     */
    public void storeUserToLocal(UserInfoDetail userInfoDetail) {
        editor.putString("userId", userInfoDetail.getUserId());
        editor.putString("name", userInfoDetail.getName());
        editor.putString("image", userInfoDetail.getImage());
        editor.putString("email", userInfoDetail.getEmail());
        editor.putString("phone", userInfoDetail.getPhone());
        editor.putString("position", userInfoDetail.getPosition());
        editor.putString("qq", userInfoDetail.getQq());
        editor.putString("username", userInfoDetail.getUsername());
        editor.putString("password", userInfoDetail.getPassword());
        editor.commit();
        this.huizModel.put("user", userInfoDetail);
    }

    /**
     * 从model中获得{@link com.huiztech.kaoqinji.model.UserInfoDetail}对象
     * 
     * @return {@link com.huiztech.kaoqinji.model.UserInfoDetail}
     */
    public UserInfoDetail getUserFromModel() {
        UserInfoDetail userInfoDetail = (UserInfoDetail) huizModel.get("user");
        return userInfoDetail;
    }

    /**
     * 根据Key从本地获得value
     * 
     * @param key
     *            本地信息key值
     */
    public String getInfoByLocal(String key, String defValue) {
        String value = sp.getString(key, defValue);
        return value;
    }

    public void putInfoFromLocal(String key, String value) {
        editor.putString(key, value);
        editor.commit();
    }

    public void removeInfoFromLocal(String key) {
        editor.remove(key);
        editor.commit();
    }

    public void storeCustomerToDB(List<ClientDetail> list) {
        db = DbUtils.create(context, "/sdcard/", "tongzhou.db");
        db.configAllowTransaction(true);
        db.configDebug(true);
    }
    
    @Override
    public void setContext(Context context) {
        super.setContext(context);
        if (this.sp == null) {
            this.sp = context.getSharedPreferences(AppConst.SP_KAOQINJI_KEY, Context.MODE_PRIVATE);
            if (this.editor == null) {
                editor = sp.edit();
            }
        }
    }

}
